/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ares.service.action;

import com.ares.service.bean.BeanEvaluacionActual;
import com.ares.service.bean.BeanEvaluacionAnterior;
import com.ares.service.bean.BeanFormulario;
import com.ares.service.bean.BeanInfoEmpleado;
import com.ares.service.bean.BeanPeriodo;
import com.ares.service.bean.BeanUserSub;
import com.ares.service.bean.BeanUsuario;
import com.ares.service.servicio.ConsultaSapService_I;
import com.ares.service.servicio.EvaluacionSapService_I;
import com.ares.service.servicio.PaqueteBusinessDelegate;
import com.ares.service.servicio.UsuarioSapService_I;
import com.ares.service.util.Constantes;
import com.ares.service.util.Util;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 *
 * @author electro
 */
public class ConsultaAction extends DispatchAction {
    UsuarioSapService_I UsuarioSubor = PaqueteBusinessDelegate.getUsuarioSapService_I();
    ConsultaSapService_I consultaService = PaqueteBusinessDelegate.getConsultaSapService_I();
    EvaluacionSapService_I evaluacionService = PaqueteBusinessDelegate.getEvaluacionSapService_I();
    BeanPeriodo beanPeriodo = new BeanPeriodo();
    String periodoEvaluacion = "";

    public ActionForward IrConsulta(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        if (Util.isSessionActiva(request)) {
            return mapping.findForward(Constantes.LOGIN);
        }
        int pagina = Integer.parseInt(request.getParameter("var"));
        
        return mapping.findForward(paginaRedireccionConsultas(pagina));
    }

    private String paginaRedireccionConsultas(int pagina){
        String mensaje = "";
        switch (pagina) {
            case 1:
                mensaje = "MiformConsultas";
                break;
            case 2:
                mensaje = "formConsultas";
                break;
        }
        return mensaje;
    }

    public ActionForward IrEvaluacionActual(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        if (Util.isSessionActiva(request)) {
            return mapping.findForward(Constantes.NOTSESSIONPOPUP);
        }
        HttpSession session = request.getSession();

        BeanUsuario user = (BeanUsuario) session.getAttribute("session_usuario");
        int pagina = Integer.parseInt(request.getParameter("var"));
        List<BeanEvaluacionActual> lstevalActual = new ArrayList<BeanEvaluacionActual>();
        BeanFormulario beanForm = null;
        beanPeriodo = evaluacionService.validarPeriodosEmpleado();

        if(beanPeriodo.getResultado().equals("4") || beanPeriodo.getResultado().equals("2")){
            Calendar calendario = Calendar.getInstance();
            periodoEvaluacion = String.valueOf(calendario.get(Calendar.YEAR));
        }
        else{//Si tiene periodo anterior o tiene dos periodos
            periodoEvaluacion =  beanPeriodo.getAnioAnterior();
        }

        switch(pagina){
            case 1:
                    beanForm = Formulario(pagina, user,"");
                    session.setAttribute("idEmpleado", user.getStrPernr());
                    lstevalActual = consultaService.getEvaluacionActual(user.getStrPernr(), periodoEvaluacion);
                    break;

            case 2:
                    String idEmpleado = request.getParameter("id");
                    BeanUserSub objusuario = null;
                    List<BeanUserSub> lstUsuarioSubor = UsuarioSubor.getLstUsuarioSubor(user.getStrId_Posicion());
                    for (BeanUserSub objusu : lstUsuarioSubor) {
                        if (objusu.getStrIdEmpleado().equals(idEmpleado)) {
                            objusuario = objusu;
                            break;
                        }
                    }

                    session.setAttribute("idEmpleado", idEmpleado);
                    beanForm = Formulario(pagina, objusuario,"");
                    lstevalActual = consultaService.getEvaluacionActual(idEmpleado, periodoEvaluacion);
                    break;

            default: return null;
        }

        session.setAttribute("formulario", beanForm);
        request.setAttribute("lstEvalActual", lstevalActual);
        return mapping.findForward("formEvaluacionActual");
    }

    public ActionForward IrEvaluacionAnterior(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        if (Util.isSessionActiva(request)) {
            return mapping.findForward(Constantes.NOTSESSIONPOPUP);
        }

        HttpSession session = request.getSession();
        BeanUsuario user = (BeanUsuario) session.getAttribute("session_usuario");
        int pagina = Integer.parseInt(request.getParameter("var"));
        beanPeriodo = evaluacionService.validarPeriodosEmpleado();

        if(beanPeriodo.getResultado().equals("4") || beanPeriodo.getResultado().equals("2")){
            Calendar calendario = Calendar.getInstance();
            periodoEvaluacion = String.valueOf(calendario.get(Calendar.YEAR));
        }
        else{//Si tiene periodo actual o tiene dos periodos
            periodoEvaluacion =  beanPeriodo.getAnioAnterior();
        }

        List<BeanEvaluacionAnterior> lstevalAnterior = new ArrayList<BeanEvaluacionAnterior>();
        BeanFormulario beanForm = null;

        switch(pagina){
            case 1://cuando el usuario es un empleado
                    beanForm = Formulario(pagina, user, "");
                    session.setAttribute("idEmpleado", user.getStrPernr());
                    lstevalAnterior = consultaService.getEvaluacionAnterior(user.getStrPernr());
                    break;

            case 2://cuando el usuario es un jefe
                    String idEmpleado = request.getParameter("id");
                    BeanUserSub objusuario = null;
                    List<BeanUserSub> lstUsuarioSubor = UsuarioSubor.getLstUsuarioSubor(user.getStrId_Posicion());
                    for (BeanUserSub objusu : lstUsuarioSubor) {
                        if (objusu.getStrIdEmpleado().equals(idEmpleado)) {
                            objusuario = objusu;
                            break;
                        }
                    }

                    session.setAttribute("idEmpleado", idEmpleado);
                    beanForm = Formulario(pagina, objusuario, user.getStrPernr());
                    lstevalAnterior = consultaService.getEvaluacionAnterior(idEmpleado);
                    break;

            case 3: //cuando el usuario es el administrador
                    String idEmpleado1 = request.getParameter("id");
                    //Tengo que obtener el Id de su jefe, para que con ese id realizar la busqueda de su informacion
                    BeanUsuario beanUsuario = null;
                    beanUsuario = evaluacionService.getEvaluador(idEmpleado1, periodoEvaluacion, "E");

                    if(beanUsuario.getStrId_Posicion().equals("00000000")){
                        //redireccionar
                        return mapping.findForward(Constantes.SININICIAREVAL);
                    }

                    BeanUserSub objusuario1 = null;
                    List<BeanUserSub> lstUsuarioSubor1 = UsuarioSubor.getLstUsuarioSubor(beanUsuario.getStrId_Posicion());

                    for (BeanUserSub objusu : lstUsuarioSubor1) {
                        if (objusu.getStrIdEmpleado().equals(idEmpleado1)) {
                            objusuario1 = objusu;
                            break;
                        }
                    }

                    session.setAttribute("idEmpleado:", idEmpleado1);
                    beanForm = Formulario(pagina, objusuario1, beanUsuario.getStrCodJefe());
                    lstevalAnterior = consultaService.getEvaluacionAnterior(idEmpleado1);
                    break;

            default: return null;
        }

        session.setAttribute("formulario", beanForm);
        request.setAttribute("lstEvalAnterior", lstevalAnterior);
        return mapping.findForward("formEvaluacionAnterior");
    }

    public ActionForward listarSubordinadosActuales(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession session = request.getSession();
        BeanUsuario usuario = (BeanUsuario) session.getAttribute("session_usuario");

        if (Util.isSessionActiva(request)) {
            return mapping.findForward(Constantes.NOTSESSIONPOPUP);
        }

        List<BeanUserSub> lstUsuarioSubor = UsuarioSubor.getLstUsuarioSubor(usuario.getStrId_Posicion());
        request.setAttribute("lstSubor", lstUsuarioSubor);
        return mapping.findForward("cargarSuborActual");
    }

    public ActionForward listarSubordinadosAnteriores(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession session = request.getSession();
        BeanUsuario usuario = (BeanUsuario) session.getAttribute("session_usuario");

        if (Util.isSessionActiva(request)) {
            return mapping.findForward(Constantes.NOTSESSIONPOPUP);
        }

        List<BeanUserSub> lstUsuarioSubor = UsuarioSubor.getLstUsuarioSubor(usuario.getStrId_Posicion());
        request.setAttribute("lstSubor", lstUsuarioSubor);
        return mapping.findForward("cargarSuborAnterior");
    }

    private BeanFormulario Formulario(int pagina, Object user, String idEvaluador) {
        BeanFormulario formulario = null;
        try{
            switch(pagina){
                case 1:
                        BeanUsuario objusuario = (BeanUsuario) user;
                        formulario = new BeanFormulario();
                        formulario.setStrID_EMPLEADO(objusuario.getStrPernr());
                        formulario.setStrNom_Empleado(objusuario.getStrNombre_EMP());
                        formulario.setStrApellido_Empleado(objusuario.getStrApe_Pat_EMP() + " " + objusuario.getStrApe_Mat_EMP());
                        formulario.setStrArea_Empleado(objusuario.getStrArea());
                        formulario.setStrPuesto_Empleado(objusuario.getStrDescrip_Idp());
                        formulario.setStrID_EVALUADOR(objusuario.getStrCodJefe());
                        break;

                case 2:
                        BeanUserSub objusuSurb = (BeanUserSub) user;
                        formulario = new BeanFormulario();
                        formulario.setStrID_EMPLEADO(objusuSurb.getStrIdEmpleado());
                        formulario.setStrNom_Empleado(objusuSurb.getStrNombre());
                        formulario.setStrApellido_Empleado(objusuSurb.getStrApaterno() + " " + objusuSurb.getStraMaterno());
                        formulario.setStrArea_Empleado(objusuSurb.getStrArea());
                        formulario.setStrPuesto_Empleado(objusuSurb.getStrDescrip_Idp());
                        formulario.setStrID_EVALUADOR(idEvaluador);
                        break;

                case 3:
                        BeanUserSub objusuSurb1 = (BeanUserSub)user;
                        formulario = new BeanFormulario();
                        formulario.setStrID_EMPLEADO(objusuSurb1.getStrIdEmpleado());
                        formulario.setStrNom_Empleado(objusuSurb1.getStrNombre());
                        formulario.setStrApellido_Empleado(objusuSurb1.getStrApaterno() + " " + objusuSurb1.getStraMaterno());
                        formulario.setStrArea_Empleado(objusuSurb1.getStrArea());
                        formulario.setStrPuesto_Empleado(objusuSurb1.getStrDescrip_Idp());
                        formulario.setStrID_EVALUADOR(idEvaluador);
                        break;
                        
                default: return null;
            }
        }catch(Exception e){
            e.getStackTrace();
        }
        return formulario;
    }
}